/**
 * Creared with IntelliJ IDEA.
 * Description:内部类  不常用（本地内部类） 常用：实例内部类  静态内部类 匿名内部类 以后说类要加前缀
 * User:yxd
 * Date:2022-02-28
 * Time:18:48
 */
//实例内部类
class Outclass{
    public int data1 = 1;
    private int data2 = 2;
    public static int data3 = 3;
    //可以把这个内部类当做外部类的一个成员变量，实例成员变量（实例内部类）
    class InnerClass{//内部类里面也可以写其他内部类，但尽量少这样写，而且实例内部类也是可以继承，被继承，实现接口的（实质上还是一个类，不能脱离本质,类本身是单独的）
        public int data4 = 4;
        private int data5 = 5;
        public int data1 = 99;
        //public static int data6 = 6;静态的是属于类的不是属于对象的（在普通的成员变量中不能创建）
        public static final int data6 = 6;//1.只能是静态的常量
        public InnerClass(){
            System.out.println("不带参数的内部类的构造方法");//内部类的构造方法 虽然是内部类 但还是类的
        }
        public void func(){
            System.out.println("hello");
            System.out.println(Outclass.this.data1);//假如内部类里面有和外部类同名的变量 这样来访问外部类的同名变量
            System.out.println(this.data1);//3.这还是内部类的   实例内部类中包含两个this 一个是自己的 一个是外部类的this（外部类类名.this）
            System.out.println(data2);
            System.out.println(data3);
            System.out.println(data4);
            System.out.println(data5);

        }
    }
}
//外部类是由一个一个内部类组成的，这样来使用内部类 链表是由节点组成的，链表里面有一个节点
class MyListNode{
    class Node{

    }
}
/*public class Test extends Outclass.InnerClass {//继承内部类
    public Test(Outclass o){// 一般不这样使用内部类
        o.super();
    }
}*/

public class Test {
    /*public void func(){//本地内部类
        class FE{
            public int a;
        }
        //缺点 只能在当前方法中使用
    }*/
    public static void main(String[] args) {
        //内部类的对象
        Outclass outclass = new Outclass();
        Outclass.InnerClass innerClass = outclass.new InnerClass();//2.外部类名.内部类名 变量 = 外部类对象的引用.new 内部类();
        innerClass.func();
    }
}
